//
// Created by ole on 24-8-21.
//

#ifndef IPLUGIN_H
#define IPLUGIN_H
#include <string>


class IPlugin {
public:
    //! Destructor
    virtual ~IPlugin() = default;

    virtual std::string getName() = 0;

    virtual std::string getVersion() = 0;

    virtual std::string toString() = 0;

    virtual bool isStarted() = 0;

    virtual bool start() = 0;

    virtual bool stop() = 0;

    template<typename T>
    T *interface() {
        return dynamic_cast<T *>(this);
    }
};


#endif //IPLUGIN_H
